package ucla.encuestaMatic.vista.componentes;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

import nextapp.echo2.app.Component;

import org.apache.commons.beanutils.MethodUtils;

import ucla.encuestaMatic.modelo.data.Encuesta;

import com.obelisco.exception.ObeliscoException;
import com.obelisco.vista.componentes.TipoFuncion;
import com.obelisco.vista.plantillas.VentanaTransaccionSimple;

public class VentanaTransaccionEncuestaMatic extends VentanaTransaccionSimple {
	
	private Encuesta encuesta;
	private String nombreMetodoValidacionEncuestado;

	public VentanaTransaccionEncuestaMatic() {		
		super();
		this.getBarraHerramientas().setMostrarSalir(false);
	}
	
	public Encuesta getEncuesta() {
		return encuesta;
	}

	public void setEncuesta(Encuesta encuesta) {
		this.encuesta = encuesta;
		this.setTitulo(encuesta.getNombre());
		this.setTituloTab(encuesta.getNombre());
		try {
			MethodUtils.invokeMethod(this.getComponenteDatos(), "setEncuesta", this.encuesta);
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}
	
	private boolean chequearEncuestaRespondidaPorPersona() {
		boolean valido = false;
		try {
			valido = ((Boolean)MethodUtils.invokeMethod(servicio, nombreMetodoValidacionEncuestado, this.encuesta)); 			
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if (!valido) {
			throw new ObeliscoException("Ya Usted respondio esta Encuesta");
		}
		return true;
	}
	
	public void mostrarDialogo(Component padre, int ancho, int alto) {
		if (chequearEncuestaRespondidaPorPersona()) {
			super.mostrarDialogo(padre, ancho, alto);
		}
	}
	
	protected void onConfirmarCambios(Object objeto, TipoFuncion tipo, String nombre) {		
		distribuirEventoConfirmarCambios(objeto,tipo, nombre);
		this.salir();
	}
	
	private void distribuirEventoConfirmarCambios(Object objeto,TipoFuncion tipo, String nombre) {	
		componenteDatos.onConfirmarCambios(objeto, tipo, nombre);
	}

	
	// Getter y Setter
	public String getNombreMetodoValidacionEncuestado() {
		return nombreMetodoValidacionEncuestado;
	}

	public void setNombreMetodoValidacionEncuestado(String nombreMetodoValidacionEncuestado) {
		this.nombreMetodoValidacionEncuestado = nombreMetodoValidacionEncuestado;
	}

}
